/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Reportes.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Reportes.DAO.ReporteEnviosDAO;
import pe.edu.pucp.Reportes.Vista.ReporteEnviosGUI;
import pe.edu.pucp.Util.Reportclass.RepViajes;
import pe.edu.pucp.Util.Reportclass.RepViajesDataSource;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author jorge
 */
public class ReporteEnviosControlador {
    private ReporteEnviosDAO dao;
    private ReporteEnviosGUI view;
    private ArrayList<RepViajes> lstRepViajes;
    private ArrayList<Continente> lstContinenteOrigen;
    private ArrayList<Continente> lstContinenteDestino;
    private ArrayList<Pais> lstPaisOrigen;
    private ArrayList<Pais> lstPaisDestino;    
    private ArrayList<Ciudad> lstCiudadOrigen;    
    private ArrayList<Ciudad> lstCiudadDestino; 
    private Usuario usr;
    
    public ReporteEnviosControlador(ReporteEnviosDAO redao, ReporteEnviosGUI review, Usuario user){
        dao=redao;
        view=review; 
        this.usr=user;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos()));
           
        llenarContinenteOrigenCombo();
        view.llenarComboPaisOrigen(null);
        view.llenarComboCiudadOrigen(null);    
        llenarContinenteDestinoCombo();
        view.llenarComboPaisDestino(null);
        view.llenarComboCiudadDestino(null);    
 
        view.addCambiarContinenteOrigen(new cambiarLstPaisOrigen());
        view.addCambiarPaisOrigen(new cambiarLstCiudadOrigen());      
        view.addCambiarContinenteDestino(new cambiarLstPaisDestino());
        view.addCambiarPaisDestino(new cambiarLstCiudadDestino());           
        view.addBuscarListener(new listarViajes());
        view.addLimpiarListener(new limpiar());
        view.addGenerarListener(new Generar()); 

        lstRepViajes = dao.listarViajes();                                             
        view.llenaGrilla(lstRepViajes);          
    }
    
    class listarViajes implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int conto = view.getContinenteOrigen()<0? -1: lstContinenteOrigen.get(view.getContinenteOrigen()).getIdcontinente();
            int paiso = view.getPaisOrigen()<0? -1: lstPaisOrigen.get(view.getPaisOrigen()).getIdpais();
            int ciudo = view.getCiudadOrigen()<0? -1: lstCiudadOrigen.get(view.getCiudadOrigen()).getIdciudad();              
            int contd = view.getContinenteDestino()<0? -1: lstContinenteDestino.get(view.getContinenteDestino()).getIdcontinente();
            int paisd = view.getPaisDestino()<0? -1: lstPaisDestino.get(view.getPaisDestino()).getIdpais();
            int ciudd = view.getCiudadDestino()<0? -1: lstCiudadDestino.get(view.getCiudadDestino()).getIdciudad();   
            lstRepViajes = dao.listarViajes(conto,paiso,ciudo,contd,paisd,ciudd,view.getFechaInicio(),view.getFechaFin());                                             
            view.llenaGrilla(lstRepViajes);  
        }
    }        
    
    private void llenarContinenteOrigenCombo(){
        lstContinenteOrigen = dao.listarContinente();
        view.llenarComboContinenteOrigen(lstContinenteOrigen);
    }

    private void llenarPaisOrigenCombo(Continente cont){
        lstPaisOrigen= dao.listarPais(cont.getIdcontinente());
        view.llenarComboPaisOrigen(lstPaisOrigen);
    }       
    
    private void llenarCiudadOrigenCombo(Pais pa){
        lstCiudadOrigen = dao.listarCiudad(pa.getIdpais());
        view.llenarComboCiudadOrigen(lstCiudadOrigen);
    }        

    private void llenarContinenteDestinoCombo(){
        lstContinenteDestino = dao.listarContinente();
        view.llenarComboContinenteDestino(lstContinenteDestino);
    }    

    private void llenarPaisDestinoCombo(Continente cont){
        lstPaisDestino= dao.listarPais(cont.getIdcontinente());
        view.llenarComboPaisDestino(lstPaisDestino);
    }    
    
    private void llenarCiudadDestinoCombo(Pais pa){
        lstCiudadDestino = dao.listarCiudad(pa.getIdpais());
        view.llenarComboCiudadDestino(lstCiudadDestino);
    }  
    
    class cambiarLstPaisOrigen implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED){                
                if (view.getContinenteOrigen()>=0){ llenarPaisOrigenCombo(lstContinenteOrigen.get(view.getContinenteOrigen())); }
                else{ view.llenarComboPaisOrigen(null); }                      
            }
        }        
    }  
    
    class cambiarLstCiudadOrigen implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getPaisOrigen()>=0) { llenarCiudadOrigenCombo(lstPaisOrigen.get(view.getPaisOrigen())); }
                else { view.llenarComboCiudadOrigen(null); }
            }
        }        
    }      
     
    class cambiarLstPaisDestino implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getContinenteDestino()>=0) { llenarPaisDestinoCombo(lstContinenteDestino.get(view.getContinenteDestino())); }
                else { view.llenarComboPaisDestino(null); }
            }
        }        
    }  
    
    class cambiarLstCiudadDestino implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getPaisDestino()>=0) { llenarCiudadDestinoCombo(lstPaisDestino.get(view.getPaisDestino())); }
                else { view.llenarComboCiudadDestino(null); }
            }
        }        
    }   
    
    class limpiar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            view.LimpiarDatos();
        }        
    }
    
    class Generar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {   
            if(lstRepViajes.isEmpty()){
                ValHelper.mostrarError("No hay datos para generar el PDF");
            }
            else{
            try {            
                RepViajesDataSource datasource = new RepViajesDataSource();                  
                for (int i=0;i<lstRepViajes.size();i++){                
                    datasource.addRepEnvio(lstRepViajes.get(i)); 
                    System.out.println();
                    System.out.println();
                    System.out.println();
                    System.out.println();
                }        
                
                HashMap hs = new HashMap(); 
        
                hs.put("creador", usr.getNombre() + " "+usr.getAppaterno() + " "+usr.getApmaterno());
                String master = System.getProperty("user.dir");
                master += "/../SIGEPA_sist/src/main/resources/Recurso/jasper/Viajes.jasper";
                JasperReport reporte = (JasperReport)JRLoader.loadObjectFromFile(master);                
                JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, hs, datasource);
                
                JasperViewer.viewReport(jasperPrint,false);
                
            } catch (JRException ex) { }                        
        }
    }
    } 
    
    
    
}
